import { useGlobalModulesStore } from '@/store/modules/globalModules';

// 预定义模块联邦导入映射表 - 用于动态加载
const federationModuleMap: Record<string, () => Promise<any>> = {
    // @ts-ignore - 模块联邦路径在运行时解析
    taskModule: () => import('taskModule/main'),
    // @ts-ignore - 模块联邦路径在运行时解析
    createTaskModule: () => import('createTaskModule/main'),
    // @ts-ignore - 模块联邦路径在运行时解析
    testModule: () => import('testModule/main'),
    // @ts-ignore - 模块联邦路径在运行时解析
    deviceModule: () => import('deviceModule/main'),
    // @ts-ignore - 模块联邦路径在运行时解析
    calibrationModule: () => import('calibrationModule/main'),
    // @ts-ignore - 模块联邦路径在运行时解析
    userModule: () => import('userModule/main'),
    // @ts-ignore - 模块联邦路径在运行时解析
    loginModule: () => import('loginModule/main'),
    // @ts-ignore - 模块联邦路径在运行时解析
    helpModule: () => import('helpModule/main')
};

export class LoadModules {
    private get store() {
        return useGlobalModulesStore();
    }

    public async loadModule(moduleName: string): Promise<any> {

        // 轮询检查systemModules是否已加载完成
        while (!this.store.systemModules || this.store.systemModules.length === 0) {
            console.log('系统模块尚未加载完成，等待100毫秒后重试...');
            await new Promise(resolve => setTimeout(resolve, 100));
        }

        const moduleConfig = this.store.systemModules.find(item => item.name == moduleName);
        if (!moduleConfig) {
            console.log("this.store.systemModules", this.store.systemModules);
            console.error(`模块 ${moduleName} 不存在`);
            return null;
        }

        // 记录当前模块配置信息
        console.log(`加载模块[${moduleName}]配置:`, {
            name: moduleConfig.name,
            moduleKey: moduleConfig.moduleKey,
            folder: moduleConfig.folder,
            fileName: moduleConfig.fileName,
            loadExternalModules: moduleConfig.loadExternalModules
        });

        if (moduleConfig.loadExternalModules) {
            const moduleKey = moduleConfig.moduleKey;
            console.log(`[${moduleName}] 尝试模块联邦加载: ${moduleKey}/main`);

            // 使用预定义映射表进行动态加载
            if (federationModuleMap[moduleKey]) {
                const resultModule = await federationModuleMap[moduleKey]();
                console.log(`模块联邦[${moduleKey}]加载成功`, resultModule);
                return resultModule;
            } else {
                console.error(`未找到模块联邦[${moduleKey}]的预定义导入函数`);
                throw new Error(`未支持的模块联邦: ${moduleKey}`);
            }
        } else {
            const cusModuleName = moduleConfig?.fileName || "common";
            console.log(`[${moduleName}] 准备加载本地模块css样式`);
            await import(`../modules/${moduleConfig.folder}/${cusModuleName}/assets/style.css`);

            console.log(`[${moduleName}] 尝试本地模块加载: ${cusModuleName}`);
            const resultModule = await import(`../modules/${moduleConfig.folder}/${cusModuleName}/${cusModuleName}.js`);
            console.log(`本地模块[${cusModuleName}]加载成功`);
            return resultModule;
        }
    }
}

// export const loadModulesInstance = new loadModules();
